/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package EntidadesController;

import Criptografia.BlowFish;
import java.sql.*;

/**
 *
 * @author thay
 */
public class Funcionario {

    private String codFuncionario = "";
    private String Usuario_usrlogin = "";
    private String nome = "";               
    private String cargo = "";
    private String email = "";
    private String grupo = "Funcionario";   
    private String senha = "";
    private String cript;
    private SQLException erro = new SQLException();
    static Connection conexao = null;
    static Statement estado = null;
    static ResultSet rs;
    private String msgerro;
    private boolean render=true;

    public boolean isRender() {
        return render;
    }

    public void setRender(boolean render) {
        this.render = render;
    }

    public String getMsgerro() {
        return msgerro;
    }

    public void setMsgerro(String msgerro) {
        this.msgerro = msgerro;
    }

    public Funcionario(){
        conexao = new Conexao().Acesso();
    }

    public String inserir() throws SQLException {

        String result_inserir = "failure";

        try {
            estado = conexao.createStatement();

            estado.execute("BEGIN WORK");

            // Criar usuario;
            estado.execute("INSERT INTO Usuario(usrlogin,senha,grupo_grupo) " +
                    "VALUES ('" + Usuario_usrlogin + "','" +
                    senha + "','" + grupo + "')");

            // Criar funcionario;
            estado.execute("INSERT INTO Funcionario(codFuncionario,Usuario_usrlogin," +
                    "Nome,Cargo,email) VALUES ('" + codFuncionario + "','" + Usuario_usrlogin + "','" + nome +
                    "','" + cargo + "','" + email + "')");

            estado.execute("COMMIT");
            //estado.close();
            
            result_inserir = "success";
            render = false;

        } catch(SQLException sqle) {
            this.erro = sqle;
            msgerro = erro.getLocalizedMessage();

            if (msgerro.contains("pk_funcionario")&&msgerro.contains("unicidade"))
            {msgerro = "Esse número de matrícula ja está cadastrado!";}

           // if (msgerro.contains("un_celular")&&msgerro.contains("unicidade"))
           // {msgerro = "Esse número de telefone ja está cadastrado!";}

            if (msgerro.contains("pk_id")&&msgerro.contains("unicidade"))
            {msgerro = "Esse login ja está cadastrado!";}


            estado.execute("ROLLBACK");
            estado.close();
            result_inserir = "failure";
            render = true;
        }
        return result_inserir;
    }
    // ERRO: transação atual foi interrompida, comandos ignorados até o fim do bloco de transação
    
    //A busca utilizará o login de usuario!!!
    public String buscar() throws SQLException{

        String result_busca = "failure";

        try {

            estado = conexao.createStatement();
            rs = estado.executeQuery("SELECT * FROM Funcionario JOIN Usuario " +
                    "ON usrlogin = '" + Usuario_usrlogin + "' AND usuario_usrlogin = '" + Usuario_usrlogin + "'");

             if (rs.next()) {
                codFuncionario = rs.getString(1);
                Usuario_usrlogin = rs.getString(2);
                nome = rs.getString(3);
                cargo = rs.getString(4);
                email = rs.getString(5); 
            }

            rs.close();
            estado.close();

            result_busca = "success";

        } catch (SQLException sqle) {
            this.erro = sqle;
            estado.execute("ROLLBACK");
            estado.close();
            result_busca = "failure";
        }
        return result_busca;
    }

    //Autor: João Gabriel
    //Esse método busca os funcionários pelo numero de cadastro deles.
    public String buscarFuncionario() throws SQLException{
        String result = "failure";

        try{
            estado = conexao.createStatement();
            rs = estado.executeQuery("SELECT * FROM Funcionario WHERE codfuncionario = '" +codFuncionario+"'");
            if(rs.next()){
                codFuncionario = rs.getString(1);
                nome = rs.getString(3);
                cargo = rs.getString(4);
                email = rs.getString(5);
            }
            rs.close();
            estado.close();
            result = "success";
        }catch(SQLException e){
            this.erro = e;
            estado.execute("ROLLBACK");
            estado.close();
            result = "failure";
        }
        return result;
    }

        //Apenas para saber se o login é valido ou não!!!!!
    public String validarLogin() throws SQLException {

        String resultado;

        Usuario u = new Usuario();
        u.setGrupo("Funcionario");
        u.setLogin(Usuario_usrlogin);
        u.setSenha(senha);                              
        
        resultado = u.validar();
        if (resultado.compareTo("success") == 0) {
            resultado = buscar();
        }
        return resultado;
    }

    public String editar() throws SQLException {

        String result_editar = "failure";

        try {
            estado = conexao.createStatement();

            estado.execute("BEGIN WORK");

            //estado.execute("UPDATE funcionario SET Usuario_usrlogin = '"
              //      + Usuario_usrlogin + "' WHERE codFuncionario ='" + codFuncionario + "'");

            estado.execute("UPDATE funcionario SET Nome = '" + nome +
                    "' WHERE codFuncionario ='" + codFuncionario + "'");

            estado.execute("UPDATE funcionario SET Cargo = '" + cargo +
                    "' WHERE codFuncionario ='" + codFuncionario + "'");

            estado.execute("UPDATE funcionario SET email = '" + email +
                    "' WHERE codFuncionario ='" + codFuncionario + "'");

            // Nao sera editado o grupo nem o login
            //estado.execute("UPDATE usuario SET senha = '" + senha +
              //      "' WHERE Usuario_usrlogin ='" + Usuario_usrlogin + "'");

            estado.execute("COMMIT");
            estado.close();

            result_editar = "success";
            nome = "";
            cargo = "";
            email = "";
            codFuncionario = "";

        } catch (SQLException sqle) {
            this.erro = sqle;
            estado.execute("ROLLBACK");
            estado.close();
            result_editar = "failure";
        }
        return result_editar;
    }

    //Para dar mais segurança pra deletar é necessário saber o login e a matricula
    public String delete() throws SQLException {

        String result_delete = "failure";
        try {
            estado = conexao.createStatement();

            estado.executeQuery("DELETE FROM funcionario WHERE codFuncionario = '"
                    + this.codFuncionario + "' " +
                    "and Usuario_usrlogin = '" + Usuario_usrlogin + "'");

            estado.close();

        } catch (SQLException sqle) {
            this.erro = sqle;
            estado.execute("ROLLBACK");
            estado.close();
            result_delete = "failure";
        }
        return result_delete;
    }
    
    public String getErro() {
        return erro.getMessage();
    }

    public String getUsuario_usrlogin() {
        return Usuario_usrlogin;
    }

    public void setUsuario_usrlogin(String Usuario_usrlogin) {
        this.Usuario_usrlogin = Usuario_usrlogin;
    }

    public String getCargo() {
        return cargo;
    }

    public void setCargo(String cargo) {
        this.cargo = cargo;
    }

    public String getCodFuncionario() {
        return codFuncionario;
    }

    public void setCodFuncionario(String codFuncionario) {
        this.codFuncionario = codFuncionario;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getGrupo() {
        return grupo;
    }

    public void setGrupo(String grupo) {
        this.grupo = grupo;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        senha = senha.toLowerCase();
        cript = BlowFish.cript(senha, Usuario_usrlogin);
        this.senha = cript;
    }

//    public static void main(String[] args) throws SQLException {
//
//            Funcionario maeli = new Funcionario();
//
//            maeli.setUsuario_usrlogin("maria");
//            maeli.setSenha("ecomp");
//            maeli.setCodFuncionario("22222222");
//            maeli.setNome("Maria Vitoria");
//            maeli.setGrupo("Funcionario");
//            maeli.setEmail("maeli@gmail.com");
//            maeli.setCargo("secretaria");
//        //    System.out.println(maeli.inserir());
//            System.out.println(maeli.buscar());
//        }
}
